import numpy as np
#制作一个 32×32 像素 的字符模拟图像

#将这个图像想象成由 4行×4列 的彩色积木块组成
#每个积木块大小是 8×8 像素

#关键特性：每个积木块内部的所有像素颜色完全一样，但不同积木块的颜色随机变化

image1= np.ones((8,8)) * np.random.randint(0, 256)
image2= np.ones((8,8)) * np.random.randint(0, 256)
image3= np.ones((8,8)) * np.random.randint(0, 256)
image4= np.ones((8,8)) * np.random.randint(0, 256)
image5= np.ones((8,8)) * np.random.randint(0, 256)
image6= np.ones((8,8)) * np.random.randint(0, 256)
image7= np.ones((8,8)) * np.random.randint(0, 256)
image8= np.ones((8,8)) * np.random.randint(0, 256)
image9= np.ones((8,8)) * np.random.randint(0, 256)
image10= np.ones((8,8)) * np.random.randint(0, 256)
image11= np.ones((8,8)) * np.random.randint(0, 256)
image12= np.ones((8,8)) * np.random.randint(0, 256)
image13= np.ones((8,8)) * np.random.randint(0, 256)
image14= np.ones((8,8)) * np.random.randint(0, 256)
image15= np.ones((8,8)) * np.random.randint(0, 256)
image16= np.ones((8,8)) * np.random.randint(0, 256)

image_hs1 = np.hstack((image1,image2,image3,image4))
image_hs2 = np.hstack((image5,image6,image7,image8))
image_hs3 = np.hstack((image9,image10,image11,image12))
image_hs4 = np.hstack((image13,image14,image15,image16))
image0 = np.vstack((image_hs1,image_hs2,image_hs3,image_hs4))

def quantize_to_chars(image, levels=5):
    """
    将图像量化为指定级别并用字符表示
    """
    # 字符对应亮度：''最暗，'#'最亮
    chars = [' ', '.', '-', '+', '#']
    # 计算量化边界
    min_val = np.min(image)
    max_val = np.max(image)
    step = (max_val - min_val) / levels  
    # 创建量化后的字符图像
    char_image = []
    for i in range(image.shape[0]):
        row = []
        for j in range(image.shape[1]):
            value = image[i, j]
            # 确定所属级别
            level = min(int((value - min_val) / step), levels - 1)
            row.append(chars[level])
        char_image.append(''.join(row))
    
    return char_image

# 对原始图像进行5组不同的量化
print("\n" + "="*50)
print("5组不同的量化结果:")
print("="*50)

quantized_1 = quantize_to_chars(image0)
print("\n第1组 - 原图:")

for row in quantized_1:
    print(row)

new_image2 = image0 + 50
quantized_2 = quantize_to_chars(new_image2)
print("\n第2组 - 更亮的图:")
for row in quantized_2:
    print(row)
